#ifndef _DISP_MANAGER_H
#define _DISP_MANAGER_H

#include <common.h>
#include <font_manager.h>

/*  
    形参命名规则：
    DispBuff 是结构体，PDispBuff 是其指针类型，
    函数参数 ptDispBuff 中的 pt 表示指向结构体的指针（p 指针 + t 结构体）
 */

typedef struct DispBuff {
	int iXres;
	int iYres;
	int iBpp;
	unsigned char *buff; // 显示缓冲区内存指针
}DispBuff, *PDispBuff;


// 定义显示设备操作结构体（在显示设备上显示或者刷新内容）
typedef struct DispOpr {
	char *name; // 显示设备名称（需要对哪个显示设备进行操作）
    int (*DeviceInit)(void);
    int (*DeviceExit)(void);
	int (*GetBuffer)(PDispBuff ptDispBuff);
	int (*FlushRegion)(PRegion ptRegion, PDispBuff ptDispBuff); // 把DispBuff的内容刷到Region上
    struct DispOpr *ptNext;
}DispOpr, *PDispOpr;


// 头文件中也是，不需要出现对framebuffer的操作
int PutPixel(int x, int y, unsigned int dwColor);
void RegisterDispDevice(DispOpr *ptDispOpr);
int RegisterAllDispDevs(void);
int ChooseDefaultDevice(char *name);
int InitDefaultDevice(void);
PDispBuff GetDeviceBuffer(void);
int FlushDeviceRegion(PRegion ptRegion, PDispBuff ptDispBuff);


void DrawFontBitMap(PFontBitMap ptFontBitMap, unsigned int dwColor);
void DrawRegion(PRegion ptRegion, unsigned int dwColor);
void DrawTextInRegionCentral(char *name, PRegion ptRegion, unsigned int dwColor);



#endif